﻿using System;
using System.Diagnostics.Contracts;

namespace MathService.NeuralNetworks
{
    public class DataImput : INeuralInput
    {
        private Func<double> f_ValueFunction;
        public Func<double> ValueFunction
        {
            get { return f_ValueFunction; }
            set
            {
                Contract.Requires(value != null, @"Функция получения значения не может отсутствовать");
                Contract.Ensures(f_ValueFunction != null);
                f_ValueFunction = value;
            }
        }

        public double Value { get { return ValueFunction(); } }

        public double Weight { get; set; }

        public double WeightValue { get { return Weight * Value; } }

        public DataImput(Func<double> DataFunction)
        {
            Contract.Requires(DataFunction != null, @"Функция получения значения не может отсутствовать");
            Contract.Ensures(f_ValueFunction != null, @"Функция получения значения не может отсутствовать");
            f_ValueFunction = DataFunction;
        }
    }
}